본문 바로가기
프로그래밍/Pawn

[PAWN/SAMP] 유용한 사용자 정의 함수 정리

by 알용 2012. 11. 19.
반응형


SAMP에서 모드 구현할 때 유용한 함수, 자주 쓰이는 함수를 모아보았습니다.

요즘 버전에서는 API가 어떻게 변경됐는지 모르겠지만 아마 모든 버전에서 사용 가능할겁니다.

맨 아래 FTF(Face To Face) 함수는 여러가지 상황에서 가능합니다.

거래, 하이파이브 애니메이션, 악수 등 다양한 상황에 적용하시면 됩니다.

기타 함수들도 제가 모드 구현하면서 많이 사용했던 함수들입니다.

쭉 보시고 자주 사용할 것 같은 코드는 가져다놓으셨다가 필요할 때 불러 쓰시면 될 것 같네요.




1. 플레이어의 이름을 구하는 함수

stock PlayerName(playerid) {

new name[24];

GetPlayerName(playerid, name, 24);

return name;

}



2. 플레이어의 체력을 구하는 함수

stock Float:PlayerHealth(playerid) {

new Float:pHealth;

GetPlayerHealth(playerid, pHealth);

return pHealth;

}



3. 플레이어의 아머를 구하는 함수

stock Float:PlayerArmour(playerid) {

new Float:pArmour;

GetPlayerArmour(playerid, pArmour);

return pArmour;

}



4. 플레이어의 아이피를 구하는 함수

stock PlayerIP(playerid) {

new ip[16];

GetPlayerIp(playerid, ip, 16);

return ip;

}



5. 플레이어의 무기를 회수하는 함수

stock RemovePlayerWeapon(playerid, weaponid) {

new weapondata[2];

for( new slot; slot < 13; slot++ ) {

GetPlayerWeaponData(playerid, slot, weapondata[0], weapondata[1]);

if( weapondata[0] ==  weaponid ) {

GivePlayerWeapon(playerid, weaponid, -weapondata[1]);

break;

}

}

}



6. 플레이어가 입력받은 최소xy,최대xy 지역 안에 있는지 검사하는 함수

stock IsPlayerInArea(playerid, Float:min_x, Float:max_x Float:min_y, Float:max_y) {

new Float:pos[3];

GetPlayerPos(playerid, pos[0], pos[1], pos[2]);

if( pos[0] >= min_x && pos[0] <= max_x && pos[1] >= min_y && pos[1] <= max_y ) return 1;

return 0;

}



7. 플레이어에게 체력을 주는 함수

stock GivePlayerHealth(playerid, Float:amount) {

new Float:pHealth = PlayerHealth(playerid);

if( pHealth+amount <= 100 ) SetPlayerHealth(playerid, pHealth+amount);

else SetPlayerHealth(playerid, 100.0);

}



8. 플레이어에게 아머를 주는 함수

stock GivePlayerArmour(playerid, Float:amount) {

new Float:pArmour = PlayerArmour(playerid);

if( pArmour+amount <= 100 ) SetPlayerArmour(playerid, pArmour+amount);

else SetPlayerArmour(playerid, 100.0);

}



9. 플레이어가 Los Santos 지역에 있는지 검사하는 함수

stock IsPlayerInLosSantos(playerid) {

if( IsPlayerInArea( playerid, 2919.469, 93.423, -782.4177, -2837.724 ) ) return 1;

return 0;

}



10. 플레이어가 San Fierro 지역에 있는지 검사하는 함수

stock IsPlayerInSanFierro(playerid) {

if( IsPlayerInArea( playerid, -1074.365, -2931.147, 1448.057, -1237.855 ) ) return 1;

return 0;

}



11. 플레이어가 Las Venturas 지역에 있는지 검사하는 함수

stock IsPlayerInLasVenturas(playerid) {

if( IsPlayerInArea( playerid, 2954.502, 782.4177, 2931.147, 595.5717 ) ) return 1;

return 0;

}



12. 플레이어와 같은 팀원에게만 메시지를 보내는 함수

stock SendTeamMessage(team, color, text[]) {

for( new i; i < GetMaxPlayers(); i++ )

if( IsPlayerConnected( i ) )

if( GetPlayerTeam( i ) == team )

SendClientMessage(i, color, text);

}



13. 플레이어 이름을 판단하는 함수

stock IsPlayerHongGilDong(playerid) {

if( !strcmp( PlayerName(playerid), "HongGilDong", true ) ) return 1;

return 0;

}



14. 원하는 범위 내의 난수를 발생시키는 함수

stock randomex(min, max) {

new randominteger;

do randominteger = random( max )+1;

while( randominteger > max || randominteger < min );

return randominteger;

}



15. 관리자에게 메세지를 보내는 함수

stock SendAdminMessage(color, text[]) {

for( new i; i < GetMaxPlayers(); i++ )

if( IsPlayerConnected( i ) )

if( IsPlayerAdmin( i ) )

SendClientMessage(i, color, text);

}



16. 개행하는 함수

stock ClearChatBox(playerid, line) {

for( new i; i < line; i++ )

SendClientMessage(playerid, 0xFFFFFFFF, " ");

}



17. 플레이어와 대상의 방향을 상호간 정면으로 맞추는 함수

stock FTF(playerid, targetid) {

new Float:angle, Float:misc = 5.0, Float:pos[2][3];

GetPlayerPos(playerid, pos[0][0], pos[0][1], pos[0][2]);

GetPlayerPos(targetid, pos[1][0], pos[1][1], pos[1][2]);

angle = 180.0-atan2(pos[0][0]-pos[1][0], pos[0][1]-pos[1][1], pos[0][2]-pos[1][2]);

angle+=misc;

misc*=-1;

SetPlayerFacingAngle(playerid, angle+misc);

}




반응형