[SAMMELTHREAD]Pawn Scripting Codeschnipsel

06/27/2013 01:38 Syfox™#1
Dies, ist eine Sammelthread über Pawn 'Codeschnipsel'

==============
SAMP / Scripting Support Foren:
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
==============

==============
Code:
stock ChangeCar(playerid, modelid) {
	if(!IsPlayerInAnyVehicle(playerid)) return 0; 
	new veh = GetPlayerVehicleID(playerid);
	if(GetVehicleModel(veh) == modelid) return 0;
	new Float:Q[7];
	GetVehiclePos(veh,Q[0],Q[1],Q[2]);
	GetVehicleZAngle(veh,Q[3]);
	GetVehicleVelocity(veh,Q[4],Q[5],Q[6]);
	DestroyVehicle(veh);
	veh = CreateVehicle(modelid,Q[0],Q[1],Q[2],Q[3],-1,-1,-1);
	PutPlayerInVehicle(playerid,veh, 0);
	SetVehicleVelocity(veh, Q[4],Q[5],Q[6]);	
	return 1;
}
==============
06/27/2013 14:05 Croco™#2
Als verbesserungs Vorschlag würde ich dir raten alle "Schnipsel" in einer Tabelle zu führen mit Autor, Datum, Version etc. und es in einen Spoiler zu packen. Ach ja und warum grenzt du LUA aus ;)
06/27/2013 14:13 Legendary#3
Quote:
Originally Posted by Croco™ View Post
Als verbesserungs Vorschlag würde ich dir raten alle "Schnipsel" in einer Tabelle zu führen mit Autor, Datum, Version etc. und es in einen Spoiler zu packen. Ach ja und warum grenzt du LUA aus ;)
Wollte ich auch Fragen, wieso nicht auch Lua ^^

PHP Code:
function _getPlayerPos player )
    if 
player then
        local x
,y,getElementPositionplayer )
        return 
x,y,z
    end
end 
PHP Code:
for 125 do
    
outputChatBox""getRootElement() )
end 
PHP Code:
function _givePlayerMoney playercmdtargethowmuch )
    if 
target and howmuch then
        local target 
getPlayerFromNametarget )
        
local playermoney getPlayerMoneytarget )
        
setPlayerMoney(target, ( tonumber howmuch ) ) + playermoney )
    
end
end
addCommandHandler
("giveplayermoney"_givePlayerMoney 
PHP Code:
function _killPlayer playercmdtarget )
    if 
target then
        local target 
getPlayerFromNametarget )
        
killPedtarget )
    
end
end
addCommandHandler
("killplayer"_killPlayer 
Die Funktionen erklären sich hoffentlich von selbst ^^
Fangen wir mit etwas kleines an, auf anfrage kann ich auch gerne mehr machen bzw. für eine Person etwas genaueres.
06/27/2013 14:58 Syfox™#4
LUA, hinzugefügt. :)
MfG
06/27/2013 15:48 Croco™#5
Dann hau ich auch ma was raus XD

Code:
function createObjectPickup(obj,x,y,z,i,b)
	b = b or ""
	local Pickup = createObject(obj,x,y,z,0,0,0,true)
	local Marker = createMarker(x,y,z-1,"cylinder",1,0,0,0,0,false)
		setElementInterior(Pickup,i)
		setElementInterior(Marker,i)

		if b ~= "" then
			setElementData(Pickup,"obj",true)
			setElementData(Pickup,"obj.desc",b)
		end

		setTimer(function()
			if isElement(Pickup) then
				local x	,y,z = getElementRotation(Pickup)
					setElementRotation(Pickup,0,0,z+3)
			end
		end,50,0)

	return Marker
end
Code:
function XMLRead(Datei,Pfad)
	local Childs = split(Pfad,"->")

	local XML = xmlLoadFile(Datei)
		local tmp = XML
		for i=1,#Childs do
			tmp = xmlFindChild(tmp,Childs[i],0)
		end

		return xmlNodeGetValue(tmp)
end
Code:
function XMLSet(Datei,Pfad,Inhalt)
	local Childs = split(Pfad,"->")

	local XML = xmlLoadFile(Datei)
	local last = XML
	local tmp = XML

		for i=1,#Childs do
			tmp = xmlFindChild(tmp,Childs[i],0)
			if tmp == false then
				tmp = xmlCreateChild(last,Childs[i])
			else
				last = tmp
			end
		end

		xmlNodeSetValue(tmp,tostring(Inhalt))

		xmlSaveFile(XML)
end
Code:
function XMLExist(Datei,Pfad)
	local Childs = split(Pfad,"->")

	local XML = xmlLoadFile(Datei)
		local tmp = XML
		for i=1,#Childs do
			tmp = xmlFindChild(tmp,Childs[i],0)
			if tmp == false then
				return false
			end
		end

		return true
end
Code:
function XMLCount(Datei)
	local XML = xmlLoadFile(Datei)
		local count = xmlNodeGetChildren(XML)

	return #count
end
06/29/2013 09:46 [MH]PooF#6
Simples Login Script:
Client:
Code:
GUIEditor = {
    button = {},
	window = {},
	edit = {},
	label = {},
}
LoginRegisterWindow = guiCreateWindow(123, 152, 486, 219, "Login/Register", false)
guiWindowSetSizable(LoginRegisterWindow, false)

LoginUsernameText = guiCreateLabel(10, 28, 156, 15, "Username", false, LoginRegisterWindow)
LoginUsernameTextBox = guiCreateEdit(9, 47, 156, 23, "", false, LoginRegisterWindow)
LoginPasswortText = guiCreateLabel(10, 80, 161, 15, "Passwort", false, LoginRegisterWindow)
LoginPasswortTextBox = guiCreateEdit(9, 98, 158, 26, "", false, LoginRegisterWindow)
guiEditSetMasked(LoginPasswortTextBox, true)
LoginButton = guiCreateButton(11, 139, 151, 41, "Login!", false, LoginRegisterWindow)
guiSetFont(LoginButton, "sa-header")
guiSetProperty(LoginButton, "NormalTextColour", "FFAAAAAA")
AlsGastSpielenButton = guiCreateButton(225, 38, 41, 139, "A\nL\nS\n\nG\nA\nS\nT", false, LoginRegisterWindow)
guiSetFont(AlsGastSpielenButton, "default-bold-small")
guiSetProperty(AlsGastSpielenButton, "NormalTextColour", "FFAAAAAA")
RegisterUsernameText = guiCreateLabel(327, 30, 149, 15, "Username", false, LoginRegisterWindow)
RegisterUsernameTextBox = guiCreateEdit(316, 43, 161, 23, "", false, LoginRegisterWindow)
RegisterPasswortText = guiCreateLabel(325, 81, 157, 15, "Passwort", false, LoginRegisterWindow)
RegisterPasswortTextBox = guiCreateEdit(319, 103, 158, 24, "", false, LoginRegisterWindow)
RegisterButton = guiCreateButton(326, 137, 138, 42, "Register!", false, LoginRegisterWindow)
guiSetFont(RegisterButton, "sa-header")
guiSetProperty(RegisterButton, "NormalTextColour", "FFAAAAAA")

showCursor(true)

function asGuestPlay ()
    guiSetVisible(LoginRegisterWindow, false)
	showCursor(false)
	outputChatBox("Öffne doch das Hilfemenü mit '/hilfe'!", player, 148, 252, 0)
end
addEventHandler("onClientGUIClick", AlsGastSpielenButton, asGuestPlay, false)

function closeLoginPanel()
       guiSetVisible(LoginRegisterWindow, false)
	showCursor(false)
end
addEvent("closeLoginPanel", true)
addEventHandler("closeLoginPanel", getRootElement(), closeLoginPanel)

function onRegisterClick ()
    local username = guiGetText(RegisterUsernameTextBox)
	local password = guiGetText(RegisterPasswortTextBox)
	if username ~= "" and password ~= "" then
	    triggerServerEvent("register", getLocalPlayer(), getLocalPlayer(), username, password)
	end
end
addEventHandler("onClientGUIClick", RegisterButton, onRegisterClick,false)

function onLoginClick ()
    local username = guiGetText(LoginUsernameTextBox)
	local password = guiGetText(LoginPasswortTextBox)
	if username ~= "" and password ~= "" then
	    triggerServerEvent("login", getLocalPlayer(), getLocalPlayer(), username, password)
	end
end
addEventHandler("onClientGUIClick", LoginButton, onLoginClick,false)
Server:
Code:
function register_func (player, username, passwort)
    local acc = addAccount(username,passwort)
	if acc then
	    logIn(player,acc,passwort)
		outputChatBox("Du hast dich erfolgreich registriert!", player, 148, 252, 0)
		triggerClientEvent(player,"closeLoginPanel", player)
	else
	    outputChatBox("Error: Admin kontaktieren!",player,  0, 125, 0)
	end
end
addEvent("register", true)
addEventHandler("register", getRootElement(), register_func)

function login_func (player,username,passwort)
    local acc = getAccount(username,passwort)
	if acc then
	    logIn(player, acc, passwort)
		outputChatBox("Du hast dich erfolgreich eingeloggt!", player, 148, 252, 0)
		outputChatBox("Willkommen zurueck, "..getPlayerName(player), player, 148, 252, 0)
		triggerClientEvent(player,"closeLoginPanel", player)
	else
	   outputChatBox("Dein Username oder dein Passwort ist falsch!", player, 0,0,0)
    end
end
addEvent("login", true)
addEventHandler("login", getRootElement(), login_func)
07/02/2013 21:10 Yasunai#7
SA:MP /tpa Befehl wie in Minecraft.
Benutzung Ingame: /tpa [senden/annehmen/ablehnen/status/abbrechen]

Was ihr braucht:

defines:
Code:
#define COLOR_RED 0xAA3333AA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_BLUE 0x0087FFFF
#define COLOR_GREY 0xAFAFAFAA
enum/new
Code:
enum pInfo
{
	pTPA,
	pXTPA
}
new PlayerInfo[MAX_PLAYERS][pInfo];
wenn das enum schon existiert, dann einfach die hier oben mit einfügen:
Code:
pTPA,
pXTPA,
Im:
Code:
public OnPlayerConnect(playerid)
{
	return 1;
}
einfach folgendes über return 1; adden:
Code:
PlayerInfo[playerid][pTPA] = 1000;
Nun zum Command

Bei
Code:
public OnPlayerCommandText(playerid, cmdtext[])
{
folgende Dinge einfügen (falls nicht vorhanden):
Code:
	new string[256];
	new tmp[256];
	new idx;
	new cmd[256];
	cmd = strtok(cmdtext, idx);
Und an einer freien Stelle unter public OnPlayerCommandText fügt ihr dann noch den Command selber ein:
Code:
	//TPA ANFANG 
	if(strcmp(cmd, "/tpa", true, 10) == 0) // /tpa command by Yasunai
	{
		new tmp2[256];
		tmp2 = strtok(cmdtext, idx);

		if(!strlen(tmp2))
		{
			SendClientMessage(playerid, COLOR_GREY, "Benutung: /tpa [senden/annehmen/ablehnen/status/abbrechen] ([ID])");
		}
		else
		{
        	if(strcmp(tmp2, "senden", true) == 0)
        	{
        		tmp = strtok(cmdtext, idx);
				new playa;
				playa = ReturnUser(tmp);
				GetPlayerName(playerid, sendername, sizeof(sendername));
				GetPlayerName(playa, giveplayer, sizeof(giveplayer));
				if(!strlen(tmp))
				{
					SendClientMessage(playerid, COLOR_GREY, "Benutung: /tpa senden [ID]");
				}
				else
				{
			   		if(playa != playerid)
			   		{
			   			if(IsPlayerConnected(playa))
			   			{
			   			    if(PlayerInfo[playerid][pXTPA] == 0)
			   			    {
			   			        if(PlayerInfo[playa][pTPA] == 1000)
			   			        {
									PlayerInfo[playa][pTPA] = playerid;
									PlayerInfo[playerid][pXTPA] = 1;
									format(string, sizeof(string), "Du hast %s eine TPA gesendet.", giveplayer);
									SendClientMessage(playerid, COLOR_BLUE, string);
									format(string, sizeof(string), "Du hast eine TPA von %s bekommen. /tpa [annehmen/ablehnen]", sendername);
									SendClientMessage(playa, COLOR_BLUE, string);
								}
								else
								{
									new playa2 = PlayerInfo[playa][pTPA];
									new others[MAX_PLAYER_NAME];
									GetPlayerName(playa2, others, sizeof(others));
								    format(string, sizeof(string), "%s hat bereits eine TPA von %s.", giveplayer, others);
								    SendClientMessage(playerid, COLOR_RED, string);
								}
							}
							else
							{
							    SendClientMessage(playerid, COLOR_RED, "Du hast bereits eine TPA an jemanden gesendet. Nutze /tpa abbrechen");
							}
						}
						else
						{
						    SendClientMessage(playerid, COLOR_RED, "Dieser Spieler existiert nicht.");
						}
					}
					else
					{
					    SendClientMessage(playerid, COLOR_RED, "Du kannst die selber keine TPA senden.");
					}
				}
				return 1;
	        }

	        if(strcmp(tmp2, "annehmen", true) == 0)
	        {
	            if(PlayerInfo[playerid][pTPA] < 1000)
	            {
	                new playa;
	                playa = PlayerInfo[playerid][pTPA];
					new Float:x, Float:y, Float:z;
                	if(IsPlayerConnected(playa))
	                {
	                    new in;
	                    in = GetPlayerInterior(playerid);
	                    GetPlayerPos(playerid, x, y, z);
	                    SetPlayerInterior(playa, in);
						SetPlayerPos(playa, x+1, y+1, z);
						GetPlayerName(playerid, sendername, sizeof(sendername));
						GetPlayerName(playa, giveplayer, sizeof(giveplayer));
						format(string, sizeof(string), "Du hast dich zu %s teleportiert.", sendername);
						SendClientMessage(playa, COLOR_GREEN, string);
						format(string, sizeof(string), "%s hat sich zu dir teleportiert.", giveplayer);
						SendClientMessage(playerid, COLOR_GREEN, string);
						PlayerInfo[playerid][pTPA] = 1000;
						PlayerInfo[playa][pXTPA] = 0;
					}
	                else
                	{
                	    SendClientMessage(playerid, COLOR_RED, "Der Spieler ist nicht mehr online!");
                	}
            	}
            	else
            	{
            	    SendClientMessage(playerid, COLOR_RED, "Es liegen keine Anfragen vor.");
            	}
            	return 1;
        	}

			if(strcmp(tmp2, "ablehnen", true) == 0)
			{
	    		if(PlayerInfo[playerid][pTPA] < 1000)
	    		{
   					new playa;
        	    	playa = PlayerInfo[playerid][pTPA];
        	    	GetPlayerName(playerid, sendername, sizeof(sendername));
					GetPlayerName(playa, giveplayer, sizeof(giveplayer));
					format(string, sizeof(string), "Deine TPA wurde von %s abgelehnt.", sendername);
					SendClientMessage(playa, COLOR_RED, string);
					format(string, sizeof(string), "Du hast die TPA von %s abgelehnt.", giveplayer);
					SendClientMessage(playerid, COLOR_RED, string);
					PlayerInfo[playerid][pTPA] = 1000;
					PlayerInfo[playa][pXTPA] = 0;
   				}
        		else
        		{
        			SendClientMessage(playerid, COLOR_RED, "Es liegen keine Anfragen vor.");
				}
				return 1;
			}

			if(strcmp(tmp2, "status", true) == 0)
			{
			    for(new i = 0; i < MAX_PLAYERS; i++)
			    {
			        if(PlayerInfo[i][pTPA] == playerid)
			        {
			            if(playerid != 0)
			            {
			            	GetPlayerName(i, giveplayer, sizeof(giveplayer));
			            	format(string, sizeof(string), "Du hast eine TPA an %s gesendet.", giveplayer);
			            }
						else
						{
						    format(string, sizeof(string), "Du hast keine TPA versendet.");
						}
			        }
			        else
			        {
			            format(string, sizeof(string), "Du hast keine TPA versendet.");
			        }
			    }
				SendClientMessage(playerid, COLOR_BLUE, string);

				if(PlayerInfo[playerid][pTPA] == 1000)
   				{
					SendClientMessage(playerid, COLOR_BLUE, "Es liegt keine TPA vor.");
    			}
				else
				{
					new pid = PlayerInfo[playerid][pTPA];
				    GetPlayerName(pid, sendername, sizeof(sendername));
					format(string, sizeof(string), "Dir liegt eine TPA von %s vor", sendername);
					SendClientMessage(playerid, COLOR_BLUE, string);
    			}
    			return 1;
			}

			if(strcmp(tmp2, "abbrechen", true) == 0)
			{
		    	if(PlayerInfo[playerid][pXTPA] == 1)
		    	{
	   				for(new i = 0; i < MAX_PLAYERS; i++)
	   				{
	   				    if(IsPlayerConnected(i))
	   				    {
	   				        if(PlayerInfo[i][pTPA] == playerid)
	   				        {
	   				            PlayerInfo[i][pTPA] = 1000;
	   				            PlayerInfo[playerid][pXTPA] = 0;
	   				            GetPlayerName(playerid, sendername, sizeof(sendername));
	   				            GetPlayerName(i, giveplayer, sizeof(giveplayer));
	   				            format(string, sizeof(string), "%s hat die TPA abgebrochen.", sendername);
								SendClientMessage(i, COLOR_RED, string);
								format(string, sizeof(string), "Du hast die TPA an %s abgebrochen.", giveplayer);
								SendClientMessage(playerid, COLOR_RED, string);
	   				        }
   					        else
   					        {
   					            SendClientMessage(playerid, COLOR_RED, "Die Person, die du suchst ist offline.");
   					            SendClientMessage(playerid, COLOR_RED, "Deine TPA wurde zurückgezogen.");
   					            PlayerInfo[playerid][pXTPA] = 0;
   					        }
   					    }
   					}
   				}
        		else
        		{
        			SendClientMessage(playerid, COLOR_RED, "Du hast keine Anfrage gesendet.");
				}
				return 1;
			}
		}
        return 1;
	}
//TPA Ende
Sollte etwas nicht klappen, schreibt mich an.

Credits:
100% Ich (Yasunai)
07/03/2013 18:25 Mostey#8
^ mit ocmd und sscanf (ungetestet und nicht kompiliert, kann sein das dort ein paar Flüchtigkeitsfehler entstanden sind)

PHP Code:
    //TPA ANFANG
    
ocmd:tpa(playerid,params[])
    {
        new 
str[128],
            
pid,
            
opt[10];
            
        if(
sscanf(params,"sd"optid)) return SendClientMessage(playeridCOLOR_GREY"Benutzung: /tpa <option> <id>");
        if(
playerid == pid || pid == INVALID_PLAYER_ID || !IsPlayerConnected(pid)) return SendClientMessage(playeridCOLOR_GREY"Diesen Spieler gibt es nicht.");
        if(
PlayerInfo[pid][pTPA] != -&& PlayerInfo[pid][pTPA] == playerid) return SendClientMessage(playerid,COLOR_GREY"Dieser Spieler hat bereits eine Anfrage von dir erhalten.");
        if(!
strcmp(opt,"senden",true))
        {
            
format(str128"Du hast %s eine TPA gesendet."PlayerName(pid));
            
SendClientMessage(playeridCOLOR_BLUEstr);
            
format(str128"Du hast eine TPA von %s bekommen. /tpa [annehmen/ablehnen]"PlayerName(playerid));
            
SendClientMessage(pidCOLOR_BLUEstr);
            
PlayerInfo[pid][pTPA] = playerid;
            return 
1;
        }
        else if(!
strcmp(opt"annehmen"true))
        {
               new 
Float:pPos[3];
            
pid PlayerInfo[playerid][pTPA];
                
            if(
PlayerInfo[playerid][pTPA] == -1) return SendClientMessage(playeridCOLOR_GREY"Dir wurde kein Teleport angeboten.");
            
GetPlayerPos(pidpPos[0], pPos[1], pPos[2]);
            
SetPlayerInterior(playeridGetPlayerInterior(pid));
            
SetPlayerPos(playeridpPos[0]+1pPos[1]+1pPos[2]);
            
format(str128"Du hast dich zu %s teleportiert."PlayerName(pid));
            
SendClientMessage(playeridCOLOR_GREENstr);
            
format(str128"%s hat sich zu dir teleportiert."PlayerName(playerid));
            
SendClientMessage(pidCOLOR_GREENstr);
            
PlayerInfo[playerid][pTPA] = -1;
            return 
1;
        }
        else if(!
strcmp(opt"ablehnen"true))
        {
            
pid PlayerInfo[playerid][pTPA];
            
            if(
PlayerInfo[playerid][pTPA] == -1) return SendClientMessage(playeridCOLOR_GREY"Dir wurde kein Teleport angeboten.");
            
format(string128"Deine TPA wurde von %s abgelehnt."PlayerName(playerid));
            
SendClientMessage(pidCOLOR_REDstring);
            
format(string128"Du hast die TPA von %s abgelehnt."PlayerName(pid));
            
SendClientMessage(playeridCOLOR_REDstr);
            
PlayerInfo[playerid][pTPA] = -1;
            return 
1;
        }
        else if(!
strcmp(opt"status"true))
        {
            new 
res;
            
pid PlayerInfo[playerid][pTPA];
            
            for(new 
iMAX_PLAYERSi++)
            {
                if(!
IsPlayerConnected(i)) continue;
                if(
PlayerInfo[i][pTPA] != playerid) continue;
                
format(str128"Du hast eine TPA an %s gesendet."PlayerName(i));
                
res 1;
                break;
            }
            
            if(!
res)
                
format(strsizeof(str), "Du hast keine TPA versendet.");
            
            
SendClientMessage(playeridCOLOR_BLUEstr);

            if(
PlayerInfo[playerid][pTPA] == -1) return SendClientMessage(playeridCOLOR_BLUE"Es liegt keine TPA vor.");
            
format(str128"Dir liegt eine TPA von %s vor"PlayerName(pid));
            
SendClientMessage(playeridCOLOR_BLUEstr);
            return 
1;
        }
    }